/**
 * @author zhou
 * @date 2022 1.18
 * @description 项目启动文件
 */

 const express = require('express')
 const app = express()
 const PORT_NUM = 80
 
 // 导入定义的用户路由业务处理器
//  const { loginHandler } = require('./user')
 
 // 静态服务器，就需要使用一个中间件 -- 应该express这个框架去实现的
 // static(root: string, options?: serveStatic.ServeStaticOptions)
 // root: string => 它表示可以有一个根目录
 // app.use( express.static('./public') ) // 如果是这样写，没有传递第二个参数(ServeStaticOptions)，在静态目录下，必须有一个index.html文件
 // 可以通过第二个参数中的index来指定，项目的首页为哪个html页面
 app.use( express.static('./public', {index: 'login.html'}) )
 
 app.listen(PORT_NUM, function() {
     console.log(`>>>>>>>>>>>>>> service started on port: ${PORT_NUM} <<<<<<<<<<<<<`)
 })
 
 // get(path: "/user/list", ...handlers: RequestHandler[])
 // ...handlers: RequestHandler[] => 表示handlers是一个数组，展开数组 => get(请求pathname, handler1, handler2...)
 // 表示get请求可以有多个业务处理方法
 // RequestHandler(req: Request, res: Response, next: NextFunction)
 // next: NextFunction => 表示是否进行下一步操作
 // 例如/user/list这个接口，先认证这个人是否有权限访问这个接口，如果没有，则返回错误信息，如果有继续执行请求业务处理
 
 // 在业务系统中，常常把handler1称为中间处理器 -- 也可以叫中间件
 const handler1 = function(req, res, next) {
     let hasRight = Math.random() > .5
     if (hasRight) {
         // 如果有权限，需要执行下一个业务handler方法
         next()
     } else {
         // 如果没有权限，则返回前端一个错误信息
         res.send({code: 400, message: '您没有访问此接口的权限'})
     }
 }
 
 const handler2 = function(req, res) {
     // 处理业务，并返回结果
     res.send({code: 200, message: 'success'})
 }
 app.get('/user/list', handler1, handler2)
 
 // 定义一个登录接口 -- 这里应该抽取一个模块，在这个模块中有一个loginHandler方法提供出来给我们使用
//  app.get('/user/login', loginHandler)
 

